home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / include / define.h < prev    next >
C/C++ Source or Header  |  1996-07-24  |  28KB  |  742 lines

  1. /*
  2.  * static char *rcsid_define_h =
  3.  *   "$Id: define.h,v 1.49 1996/07/24 07:13:23 master Exp master $";
  4.  */
  5.  
  6. /*
  7.     CrossFire, A Multiplayer game for X-windows
  8.  
  9.     Copyright (C) 1994 Mark Wedel
  10.     Copyright (C) 1992 Frank Tore Johansen
  11.  
  12.     This program is free software; you can redistribute it and/or modify
  13.     it under the terms of the GNU General Public License as published by
  14.     the Free Software Foundation; either version 2 of the License, or
  15.     (at your option) any later version.
  16.  
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.  
  22.     You should have received a copy of the GNU General Public License
  23.     along with this program; if not, write to the Free Software
  24.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  
  26.     The author can be reached via e-mail to master@rahul.net
  27. */
  28.  
  29. /* This file is really too large.  With all the .h files
  30.  * around, this file should be better split between them - things
  31.  * that deal with objects should be in objects.h, things dealing
  32.  * with players in player.h, etc.  As it is, everything just seems
  33.  * to be dumped in here.
  34.  */
  35.  
  36. /*
  37.  * Crossfire requires ANSI-C, but some compilers "forget" to define it.
  38.  * Thus the prototypes made by cextract don't get included correctly.
  39.  */
  40. #if !defined(__STDC__) 
  41. #error - Your ANSI C compiler should be defining __STDC__
  42. #endif
  43.  
  44.  
  45. /* The offsetof macro is part of ANSI C, but many compilers lack it, for
  46.  * example "gcc -ansi"
  47.  */
  48. #if !defined (offsetof) && !defined(sgi)
  49. #define offsetof(type, member) (int)&(((type *)0)->member)
  50. #endif
  51.  
  52. /* Decstations have trouble with fabs()... */
  53. #define FABS(x) (x<0?-x:x)
  54.  
  55. #ifndef MIN
  56. #define MIN(x,y) ((x)<(y)?(x):(y))
  57. #endif
  58. #ifndef MAX
  59. #define MAX(x,y) ((x)>(y)?(x):(y))
  60. #endif
  61.  
  62. #define MAX_STAT    30    /* The maximum legal value of any stat */
  63. #define MIN_STAT     1    /* The minimum legal value of any stat */
  64.  
  65. #define MAX_BUF 256    /* Used for all kinds of things */
  66. #define VERY_BIG_BUF 1024
  67. #define HUGE_BUF    4096 /* Used for messages - some can be quite long */
  68. #define SOCKET_BUFLEN 4096    /* Max length a packet could be */
  69.  
  70. #define FONTSIZE 3000    /* Max chars in font */
  71.  
  72. #define MAX_ANIMATIONS 64
  73.  
  74. /* Fatal variables: */
  75. #define OUT_OF_MEMORY        0
  76. #define MAP_ERROR        1
  77. #define ARCHTABLE_TOO_SMALL    2
  78. #define TOO_MANY_ERRORS        3
  79.  
  80. /* Only add new values to this list if somewhere in the program code,
  81.  * it is actually needed.  Just because you add a new monster does not
  82.  * mean it has to have a type defined here.  That only needs to happen
  83.  * if in some .c file, it needs to do certain special actions based on
  84.  * the monster type, that can not be handled by any of the numerous
  85.  * flags
  86.  * Also, if you add new entries, try and fill up the holes in this list.
  87.  */
  88. #define PLAYER        1
  89. #define BULLET        2
  90. #define ROD        3
  91. #define TREASURE    4
  92. #define POTION        5
  93. #define FOOD        6
  94. #define POISON        7
  95. #define BOOK        8
  96. #define CLOCK        9
  97. #define FBULLET        10
  98. #define FBALL        11
  99. #define LIGHTNING    12
  100. #define ARROW        13
  101. #define BOW        14
  102. #define WEAPON        15
  103. #define ARMOUR        16
  104. #define PEDESTAL    17
  105. #define ALTAR        18
  106. #define CONFUSION    19
  107. #define LOCKED_DOOR    20
  108. #define SPECIAL_KEY    21
  109. #define MAP        22
  110. #define DOOR        23
  111. #define KEY        24
  112. #define MMISSILE    25
  113. #define TIMED_GATE    26
  114. #define TRIGGER        27
  115. #define GRIMREAPER    28
  116. #define MAGIC_EAR    29
  117. #define TRIGGER_BUTTON    30
  118. #define TRIGGER_ALTAR    31
  119. #define TRIGGER_PEDESTAL 32
  120. #define SHIELD        33
  121. #define HELMET        34
  122. #define HORN        35
  123. #define MONEY        36
  124. #define GRAVE        37
  125. #define GRAVESTONE    38
  126. #define AMULET        39
  127. #define PLAYERMOVER    40
  128. #define TELEPORTER    41
  129. #define CREATOR        42
  130. #define SKILL        43    /* Skills are similar to abilites, but
  131.                  * not related to spells.  by njw@cs.city.ac.uk
  132.                  */
  133. #define EXPERIENCE    44    /* An experience 'object'. Needed for multi-exp/skills
  134.                  * hack. -b.t. thomas@astro.psu.edu
  135.                      */
  136. #define EARTHWALL    45
  137. #define GOLEM        46
  138. #define BOMB        47
  139.  
  140. #define BLINDNESS    49
  141.  
  142. #define SPEEDBALL    52
  143. #define DEAD_OBJECT    53
  144. #define DRINK        54
  145.  
  146. #define GEM        60 
  147. #define FIRECHEST    61 
  148. #define FIREWALL    62
  149.  
  150. #define CHECK_INV    64    /* by b.t. thomas@nomad.astro.psu.edu */
  151. #define MOOD_FLOOR    65    /* by b.t. thomas@nomad.astro.psu.edu 
  152.                  * values of last_sp set how to change:
  153.                  * 0 = furious,    all monsters become aggressive
  154.                  * 1 = angry, all but friendly become aggressive
  155.                  * 2 = calm, all aggressive monsters calm down 
  156.                  * 3 = sleep, all monsters fall asleep 
  157.                  * 4 = charm, monsters become pets
  158.                  */
  159. #define EXIT        66
  160. #define ENCOUNTER    67
  161. #define SHOP_FLOOR    68
  162. #define SHOP_MAT    69
  163. #define RING        70
  164.  
  165. #define FLESH        72    /* animal 'body parts' -b.t. */
  166. #define INORGANIC    73    /* metals and minerals */ 
  167.  
  168. #define LIGHTER        75
  169. #define TRAP_PART    76    /* Needed by set traps skill -b.t. */ 
  170.  
  171. #define SPELLBOOK    85
  172.  
  173. #define CLOAK        87
  174. #define CONE        88
  175.  
  176. #define SPINNER        90
  177. #define GATE        91
  178. #define BUTTON        92
  179. #define HANDLE        93
  180. #define HOLE        94
  181. #define TRAPDOOR    95
  182. #define WORD_OF_RECALL    96
  183. #define PARAIMAGE    97
  184. #define SIGN        98
  185. #define BOOTS        99
  186. #define GLOVES        100
  187.  
  188. #define CONVERTER    103
  189. #define BRACERS        104
  190. #define POISONING    105
  191. #define SAVEBED        106
  192. #define POISONCLOUD    107
  193. #define FIREHOLES    108
  194. #define WAND        109
  195. #define ABILITY        110
  196. #define SCROLL        111
  197. #define DIRECTOR    112
  198. #define GIRDLE        113
  199. #define FORCE        114
  200.  
  201.  
  202. /* Eneq(@csd.uu.se): Id for close_container archetype. */
  203. #define CLOSE_CON    121
  204. #define CONTAINER    122
  205. #define ARMOUR_IMPROVER 123
  206. #define WEAPON_IMPROVER 124
  207. #define MONEY_CHANGER    125
  208.  
  209. #define SKILLSCROLL    130    /* can add a skill to player's inventory -bt.*/
  210.  
  211. #define DEEP_SWAMP    138
  212. #define IDENTIFY_ALTAR    139
  213.  
  214. #define CANCELLATION    141
  215.  
  216. /* Mark Wedel (master@cats.ucsc.edu) Shop inventories */
  217. #define MENU        150
  218.  
  219. /* peterm:  ball lightning and color spray */
  220. #define BALL_LIGHTNING 151
  221.  
  222. #define SWARM_SPELL 153
  223. #define RUNE 154
  224.  
  225. #define POWER_CRYSTAL 156
  226. #define CORPSE 157
  227.  
  228.  
  229. #define WINUPPER (-5)
  230. #define WINLOWER 5
  231. #define WINLEFT (-5)
  232. #define WINRIGHT 5
  233. #define BARLENGTH_INV 281
  234. #define BARLENGTH_LOOK 146
  235. #define MAX_NAME 16
  236. #define BIG_NAME 32
  237. #define SIZEOFFREE 49
  238. #define INFOLINES 36
  239. #define INFOCHARS 50 /* Note that this is only the default */
  240. #define FONTWIDTH 8  /* Note that this is only the default */
  241. #define FONTHEIGHT 13
  242. #define S_BULLET 0
  243. #define S_FIREBALL 1
  244. #define S_LIGHTNING 2
  245.  
  246. /*
  247.  * Number of compression methods depend on whether COMPRESS_SUFFIX is defined.
  248.  */
  249. #ifdef COMPRESS_SUFFIX
  250. #define NROF_COMPRESS_METHODS   4
  251. #else
  252. #define NROF_COMPRESS_METHODS   3
  253. #endif
  254.  
  255. /*
  256.  * Attacktypes:
  257.  * If this ever exceeds 16, rmember to change all the short's in global.h.
  258.  * (Already done, Vick 930307 :)
  259.  */
  260.  
  261. #define NROFATTACKS 23
  262.  
  263. #define AT_PHYSICAL    0x00000001 /*     1 */
  264. #define AT_MAGIC    0x00000002 /*     2 */
  265. #define AT_FIRE        0x00000004 /*     4 */
  266. #define AT_ELECTRICITY    0x00000008 /*     8 */
  267. #define AT_COLD        0x00000010 /*    16 */
  268. #define AT_CONFUSION    0x00000020 /*    32 The spell will use this one */
  269. #define AT_ACID        0x00000040 /*    64 Things might corrode when hit */
  270. #define AT_DRAIN    0x00000080 /*   128 */
  271. #define AT_WEAPONMAGIC    0x00000100 /*   256 Very special, use with care */
  272. #define AT_GHOSTHIT    0x00000200 /*   512 Attacker dissolves */
  273. #define AT_POISON    0x00000400 /*  1024 */
  274. #define AT_SLOW        0x00000800 /*  2048 */
  275. #define AT_PARALYZE    0x00001000 /*  4096 */
  276. #define AT_TURN_UNDEAD    0x00002000 /*  8192 */
  277. #define AT_FEAR        0x00004000 /* 16384 */
  278. #define AT_CANCELLATION 0x00008000 /* 32768 ylitalo@student.docs.uu.se */
  279. #define AT_DEPLETE      0x00010000 /* 65536 vick@bern.docs.uu.se */
  280. #define AT_DEATH        0x00020000 /*131072 peterm@soda.berkeley.edu */
  281. #define AT_CHAOS        0x00040000 /*262144 peterm@soda.berkeley.edu*/
  282. #define AT_COUNTERSPELL 0x00080000 /*524288 peterm@soda.berkeley.edu*/
  283. #define AT_GODPOWER    0x00100000 /*1048576  peterm@soda.berkeley.edu */
  284. #define AT_HOLYWORD    0x00200000 /*2097152 race selective attack thomas@astro.psu.edu */ 
  285. #define AT_BLIND    0x00400000 /*4194304 thomas@astro.psu.edu */ 
  286.  
  287.  
  288. #define PATH_NULL    0x00000000
  289. #define PATH_PROT    0x00000001
  290. #define PATH_FIRE    0x00000002
  291. #define PATH_FROST    0x00000004
  292. #define PATH_ELEC    0x00000008
  293. #define PATH_MISSILE    0x00000010
  294. #define PATH_SELF    0x00000020
  295. #define PATH_SUMMON    0x00000040
  296. #define PATH_ABJURE    0x00000080
  297. #define PATH_RESTORE    0x00000100
  298. #define PATH_DETONATE    0x00000200
  299. #define PATH_MIND    0x00000400
  300. #define PATH_CREATE    0x00000800
  301. #define PATH_TELE    0x00001000
  302. #define PATH_INFO    0x00002000
  303. #define PATH_TRANSMUTE    0x00004000
  304. #define PATH_TRANSFER    0x00008000
  305. #define PATH_TURNING    0x00010000
  306. #define PATH_WOUNDING    0x00020000
  307. #define PATH_DEATH    0x00040000
  308. #define PATH_LIGHT    0x00080000
  309.  
  310. #define NRSPELLPATHS    20
  311.  
  312. #define NROFGODS 5    /* number of gods in Gods[] array */ 
  313.  
  314. #define NROFREALSPELLS    165    /* Number of different spells */
  315.  
  316. #define NROFSKILLS  32  /* match to the number of elements in skills[] array */
  317.  
  318. #define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */
  319.  
  320.  
  321.  
  322. #define NROFMATERIALS    9
  323. #define M_PAPER        1
  324. #define M_IRON        2
  325. #define M_GLASS     4
  326. #define M_LEATHER    8
  327. #define M_WOOD        16
  328. #define M_ORGANIC    32
  329. #define M_STONE        64
  330. #define M_CLOTH        128
  331. #define M_ADAMANT       256
  332.  
  333. /* These are used in the MapLook flags element.  They are not used in
  334.  * in the object flags structure.
  335.  */
  336.  
  337. #define P_BLOCKSVIEW    0x00000001
  338. #define P_NO_MAGIC      0x00000002 /* Spells (some) can't pass this object */
  339. #define P_NO_PASS       0x00000004 /* Nothing can pass (wall() is true) */
  340. #define P_PASS_THRU     0x00000008 /* */
  341. #define P_IS_ALIVE      0x00000010 /* */
  342. #define P_NO_CLERIC     0x00000020 /* no clerical spells cast here */
  343.  
  344. /* Flag structure now changed.
  345.  * Each flag is now a bit offset, starting at zero.  The macros
  346.  * will update/read the appropriate flag element in the object
  347.  * structure.
  348.  *
  349.  * Hopefully, since these offsets are integer constants set at run time,
  350.  * the compiler will reduce the macros something as simple as the 
  351.  * old system was.
  352.  *
  353.  * Flags now have FLAG as the prefix.  This to be clearer, and also
  354.  * to make sure F_ names are not still being used anyplace.
  355.  *
  356.  * The macros below assume that the flag size for each element is 32
  357.  * bits.  IF it is smaller, bad things will happen.  See structs.h
  358.  * for more info.
  359.  *
  360.  * All functions should use the macros below.  In process of converting
  361.  * to the new system, I find several files that did not use the previous
  362.  * macros.
  363.  * 
  364.  * If any FLAG's are added, be sure to add them to the flag_links structure
  365.  * in common/loader.c, if necessary.
  366.  */
  367. /* Basic routines to do above */
  368. #define SET_FLAG(xyz, p) \
  369.     ((xyz)->flags[p/32] |= (1U << (p % 32)))
  370. #define CLEAR_FLAG(xyz, p) \
  371.     ((xyz)->flags[p/32] &= ~(1U << (p % 32)))
  372. #define QUERY_FLAG(xyz, p) \
  373.     ((xyz)->flags[p/32] & (1U << (p % 32)))
  374.  
  375.  
  376. #define FLAG_ALIVE         0 /* Object can fight (or be fought) */
  377. #define FLAG_WIZ         1 /* Object has special privilegies */
  378. #define FLAG_REMOVED         2 /* Object is not in any map or invenory */
  379. #define FLAG_FREED         3 /* Object is in the list of free objects */
  380. #define FLAG_WAS_WIZ         4 /* Player was once a wiz */
  381. #define FLAG_APPLIED         5 /* Object is ready for use by living */
  382. #define FLAG_UNPAID         6 /* Object hasn't been paid for yet */
  383. #define FLAG_AN             7 /* Name must be prepended by "an", not "a"*/
  384. #define FLAG_NO_PICK         8 /* Object can't be picked up */
  385. #define FLAG_WALK_ON         9 /* Applied when it's walked upon */
  386. #define FLAG_NO_PASS        10 /* Nothing can pass (wall() is true) */
  387. #define FLAG_ANIMATE        11 /* The object looks at archetype for faces */
  388. #define FLAG_SLOW_MOVE        12 /* Uses the stats.exp/1000 to slow down */
  389. #define FLAG_FLYING        13 /* Not affected by WALK_ON or SLOW_MOVE) */
  390. #define FLAG_MONSTER        14 /* Will attack players */
  391. #define FLAG_FRIENDLY        15 /* Will help players */
  392. #define FLAG_GENERATOR        16 /* Will generate type ob->stats.food */
  393. #define FLAG_THROWN        17 /* Will continue to fly through the air. */
  394. #define FLAG_AUTO_APPLY        18 /* Will be applied when created */
  395. #define FLAG_TREASURE        19 /* Will generate treasure when applied */
  396. #define FLAG_APPLY_ONCE        20 /* Will dissapear when applied */
  397. #define FLAG_SEE_INVISIBLE     21 /* Will see invisible player */
  398. #define FLAG_CAN_ROLL        22 /* Object can be rolled */
  399. #define FLAG_IS_TURNING        23 /* Object will turn after player */
  400. #define FLAG_IS_TURNABLE     24 /* Object can change face with direction */
  401. #define FLAG_WALK_OFF        25 /* Object is applied when left */
  402. #define FLAG_FLY_ON        26 /* As WALK_ON, but only with FLAG_FLYING */
  403. #define FLAG_FLY_OFF        27 /* As WALK_OFF, but only with FLAG_FLYING */
  404. #define FLAG_IS_USED_UP        28 /* When (--food<0) the object will exit */
  405. #define FLAG_IDENTIFIED        29 /* Not implemented yet */
  406. #define FLAG_REFLECTING        30 /* Object reflects from walls (lightning) */
  407. #define FLAG_CHANGING        31 /* Changes to other_arch when anim is done*/
  408. #define FLAG_SPLITTING        32 /* Object splits into stats.food other objs */
  409. #define FLAG_HITBACK        33 /* Object will hit back when hit */
  410. #define FLAG_STARTEQUIP        34 /* Object was given to player at start */
  411. #define FLAG_BLOCKSVIEW        35 /* Object blocks view */
  412. #define FLAG_UNDEAD        36 /* Monster is undead */
  413. #define FLAG_SCARED        37 /* Monster is scared (mb player in future)*/
  414. #define FLAG_UNAGGRESSIVE    38 /* Monster doesn't attack players */
  415. #define FLAG_REFL_MISSILE    39 /* Arrows will reflect from object */
  416. #define FLAG_REFL_SPELL        40 /* Spells (some) will reflect from object */
  417. #define FLAG_NO_MAGIC        41 /* Spells (some) can't pass this object */
  418. #define FLAG_NO_FIX_PLAYER    42 /* fix_player() won't be called */
  419. #define FLAG_NEED_IE        43 /* 1 ruby -> 2 rubies */
  420. #define FLAG_TEAR_DOWN        44 /* at->faces[hp*animations/maxhp] at hit */
  421. #define FLAG_RUN_AWAY        45 /* Object runs away from nearest player \
  422.                       but can still attack at a distance */
  423. #define FLAG_PASS_THRU        46 /* Objects with can_pass_thru can pass \
  424.                       thru this object as if it wasn't there */
  425. #define FLAG_CAN_PASS_THRU    47 /* Can pass thru... */
  426. #define FLAG_PICK_UP        48 /* Can pick up */
  427. #define FLAG_UNIQUE        49 /* Item is really unique (UNIQUE_ITEMS) */
  428. #define FLAG_NO_DROP        50 /* Object can't be dropped */
  429. #define FLAG_NO_PRETEXT        51 /* No text is added before name. */
  430. #define FLAG_CAST_SPELL        52 /* (Monster) can learn and cast spells */
  431. #define FLAG_USE_SCROLL        53 /* (Monster) can read scroll */
  432. #define FLAG_USE_WAND        54 /* (Monster) can apply and use wands */
  433. #define FLAG_USE_BOW        55 /* (Monster) can apply and fire bows */
  434. #define FLAG_USE_ARMOUR        56 /* (Monster) can wear armour/shield/helmet */
  435. #define FLAG_USE_WEAPON        57 /* (Monster) can wield weapons */
  436. #define FLAG_USE_RING        58 /* (Monster) can use rings, boots, gauntlets, etc */
  437. #define FLAG_READY_WAND        59 /* (Monster) has a wand readied... 8) */
  438. #define FLAG_READY_BOW        60 /* not implemented yet */
  439. #define FLAG_XRAYS        61 /* X-ray vision */
  440. #define FLAG_NO_APPLY        62 /* Avoids step_on/fly_on to this object */
  441. #define FLAG_IS_FLOOR        63 /* Can't see what's underneath this object */
  442. #define FLAG_LIFESAVE        64 /* Saves a players' life once, then destr. */
  443. #define FLAG_NO_STRENGTH    65 /* Strength-bonus not added to wc/dam */
  444. #define FLAG_SLEEP        66 /* NPC is sleeping */
  445. #define FLAG_STAND_STILL    67 /* NPC will not (ever) move */
  446. #define FLAG_RANDOM_MOVE    68 /* NPC will move randomly */
  447. #define FLAG_ONLY_ATTACK    69 /* NPC will evaporate if there is no enemy */
  448. #define FLAG_CONFUSED        70 /* Will also be unable to cast spells */
  449. #define FLAG_STEALTH        71 /* Will wake monsters with less range */
  450. #define FLAG_WIZPASS        72 /* The wizard can go through walls */
  451. #define FLAG_IS_LINKED        73 /* The object is linked with other objects */
  452. #define FLAG_CURSED        74 /* The object is cursed */
  453. #define FLAG_DAMNED        75 /* The object is _very_ cursed */
  454. #define FLAG_SEE_ANYWHERE    76 /* The object will be visible behind walls */
  455. #define FLAG_KNOWN_MAGICAL    77 /* The object is known to be magical */
  456. #define FLAG_KNOWN_CURSED    78 /* The object is known to be cursed */
  457. #define FLAG_CAN_STEAL        79 /* The monster can steal objects */
  458. #define FLAG_BEEN_APPLIED    80 /* The object has been applied */
  459. #define FLAG_READY_ROD        81 /* (Monster) has a rod readied... 8) */
  460. #define FLAG_USE_ROD        82 /* (Monster) can apply and use rods */
  461. #define FLAG_READY_HORN        83 /* (Monster) has a horn readied */
  462. #define FLAG_USE_HORN        84 /* (Monster) can apply and use horns */
  463. #define FLAG_MAKE_INVIS            85 /* (Item) gives invisibility when applied */
  464. #define FLAG_INV_LOCKED        86 /* Item will not be dropped from inventory */
  465. #define FLAG_IS_WOODED        87 /* Item is wooded terrain */
  466. #define FLAG_IS_HILLY        88 /* Item is hilly/mountain terrain */
  467. #define FLAG_READY_SKILL    89 /* (Monster or Player) has a skill readied */
  468. #define FLAG_READY_WEAPON    90 /* (Monster or Player) has a weapon readied */
  469. #define FLAG_NO_SKILL_IDENT    91 /* If set, item cannot be identified w/ a skill */
  470. #define FLAG_BLIND        92 /* If set, object cannot see (visually) */
  471. #define FLAG_SEE_IN_DARK    93 /* if set ob not effected by darkness */ 
  472. #define FLAG_IS_CAULDRON    94 /* container can make alchemical stuff */
  473.  
  474. #define NUM_FLAGS        94 /* Should always be equal to the last
  475.                     * defined flag */
  476.  
  477. /* Values can go up to 95 before the size of the flags array in the
  478.  * object structure needs to be enlarged.
  479.  */
  480.  
  481.  
  482. #define NROFNEWOBJS(xyz)    ((xyz)->stats.food)
  483.  
  484. #define SLOW_PENALTY(xyz)    ((xyz)->stats.exp)/1000.0
  485. #define SET_SLOW_PENALTY(xyz,fl)    (xyz)->stats.exp=(fl)*1000
  486. #define SET_GENERATE_TYPE(xyz,va)    (xyz)->stats.sp=(va)
  487. #define GENERATE_TYPE(xyz)    ((xyz)->stats.sp)
  488. #define GENERATE_SPEED(xyz)    ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */
  489.  
  490. /* Note: These values are only a default value, resizing can change them */
  491. #define INV_SIZE    12    /* How many items can be viewed in inventory */
  492. #define LOOK_SIZE    6    /* ditto, but for the look-window */
  493. #define MAX_INV_SIZE    40    /* For initializing arrays */
  494. #define MAX_LOOK_SIZE    40    /* ditto for the look-window */
  495.  
  496. #define EDITABLE(xyz)        ((xyz)->arch->editable)
  497.  
  498. #define E_MONSTER        0x00000001
  499. #define E_EXIT            0x00000002
  500. #define E_TREASURE        0x00000004
  501. #define E_BACKGROUND        0x00000008
  502. #define E_DOOR            0x00000010
  503. #define E_SPECIAL        0x00000020
  504. #define E_SHOP            0x00000040
  505. #define E_NORMAL        0x00000080
  506. #define E_FALSE_WALL        0x00000100
  507. #define E_WALL            0x00000200
  508. #define E_EQUIPMENT        0x00000400
  509. #define E_OTHER            0x00000800
  510. #define E_ARTIFACT        0x00001000
  511.  
  512. #define EXIT_PATH(xyz)    (xyz)->slaying
  513. #define EXIT_LEVEL(xyz) (xyz)->stats.food
  514. #define EXIT_X(xyz)     (xyz)->stats.hp
  515. #define EXIT_Y(xyz)     (xyz)->stats.sp
  516.  
  517. #define MAP_TIMEOUT(m)    ((m)->map_object->value)
  518. #define MAP_RESETTIME(m)    ((m)->map_object->weight)
  519.  
  520. /* This is only used when loading the map.  For internal use (treausre
  521.  * generation, etc). the map structure difficulty field should be used.
  522.  */
  523. #define MAP_DIFFICULTY(m)    ((m)->map_object->level)
  524.  
  525. /* for use by the lighting code */
  526. #define MAX_LIGHT_RADII     4    /* max radii for 'light' object, really
  527.                      * large values allow objects that can
  528.                      * slow down the game */
  529. #define MAX_DARKNESS        5    /* maximum map darkness, there is no
  530.                      * practical reason to exceed this */ 
  531. #define MAP_DARKNESS(m)           (m)->map_object->invisible>MAX_DARKNESS? \
  532.                   MAX_DARKNESS:(m)->map_object->invisible;
  533. #define BRIGHTNESS(xyz)        (xyz)->glow_radius>MAX_LIGHT_RADII? \
  534.                   MAX_LIGHT_RADII:(xyz)->glow_radius;
  535.  
  536. #define F_BUY 0
  537. #define F_SELL 1
  538. #define F_TRUE 2    /* True value of item, unadjusted */
  539.  
  540. #define DIRX(xyz)    freearr_x[(xyz)->direction]
  541. #define DIRY(xyz)    freearr_y[(xyz)->direction]
  542.  
  543. #define D_LOCK(xyz)    (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=1;
  544. #define D_UNLOCK(xyz)    (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=0;
  545.  
  546. #define ARMOUR_SPEED(xyz)    (xyz)->last_sp
  547. #define ARMOUR_SPELLS(xyz)    (xyz)->last_heal
  548. #define WEAPON_SPEED(xyz)    (xyz)->last_sp
  549.  
  550.  
  551. #ifdef USE_BUTTONS
  552. #ifndef NUMDIRBUTTS
  553. #define NUMDIRBUTTS 9
  554. #define NW_button 0
  555. #define NO_button 1
  556. #define NE_button 2
  557. #define WE_button 3
  558. #define BR_button 4
  559. #define EA_button 5
  560. #define SW_button 6
  561. #define SO_button 7
  562. #define SE_button 8
  563. #define NUMOPBUTTS 4
  564. #define CHANGE_button 0
  565. #define APPLY_button 1
  566. #define PEACE_button 2
  567. #define TALK_button 3
  568. #endif
  569. #endif
  570.  
  571. #define MAP_IN_MEMORY 1
  572. #define MAP_SWAPPED 2
  573. #define MAP_LOADING 3
  574. #define MAP_SAVING 4
  575.  
  576. /*
  577.  * Check nrof variable *before* calling CAN_MERGE()
  578.  * stats.sp is used in wands, spellbooks and scrolls.
  579.  */
  580.  
  581.  
  582. #define CAN_MERGE(ob1,ob2) \
  583.   ((ob1) != (ob2) && \
  584.    (ob1)->type == (ob2)->type && \
  585.    ((ob1)->speed == (ob2)->speed) && \
  586.    (QUERY_FLAG((ob1),FLAG_ANIMATE) || FABS((ob1)->speed) < 0.001 ) && \
  587.    (ob1)->arch == (ob2)->arch && \
  588.    (ob1)->stats.sp == (ob2)->stats.sp && \
  589.    (ob1)->flags[0] == (ob2)->flags[0] && \
  590.    (ob1)->flags[1] == (ob2)->flags[1] && \
  591.    (ob1)->flags[2] == (ob2)->flags[2] && \
  592.    (ob1)->magic == (ob2)->magic && \
  593.    (ob1)->name == (ob2)->name && \
  594.    (ob1)->title == (ob2)->title && \
  595.    (ob1)->msg == (ob2)->msg && \
  596.    ((ob1)->type!=SCROLL || (ob1)->level==(ob2)->level) && \
  597.    (ob1)->stats.food == (ob2)->stats.food && \
  598.    (ob1)->protected == (ob2)->protected && \
  599.    (ob1)->immune == (ob2)->immune && \
  600.    (ob1)->vulnerable == (ob2)->vulnerable \
  601. )
  602.  
  603. /*
  604.  * Flags to generate_treasures():
  605.  */
  606.  
  607. #define GT_INVENTORY    0
  608. #define GT_ENVIRONMENT    1
  609. #define GT_INVISIBLE    2
  610.  
  611. /******************************************************************************/
  612. /* Monster Movements added by kholland@sunlab.cit.cornell.edu                 */
  613. /******************************************************************************/
  614. /* if your monsters start acting wierd, mail me                               */
  615. /******************************************************************************/
  616. /* the following definitions are for the attack_movement variable in monsters */
  617. /* if the attack_variable movement is left out of the monster archetype, or is*/
  618. /* set to zero                                                                */
  619. /* the standard mode of movement from previous versions of crossfire will be  */
  620. /* used. the upper four bits of movement data are not in effect when the monst*/
  621. /* er has an enemy. these should only be used for non agressive monsters.     */
  622. /* to program a monsters movement add the attack movement numbers to the movem*/
  623. /* ment numbers example a monster that moves in a circle until attacked and   */
  624. /* then attacks from a distance:                                              */
  625. /*                                                      CIRCLE1 = 32          */
  626. /*                                              +       DISTATT = 1           */
  627. /*                                      -------------------                   */
  628. /*                      attack_movement = 33                                  */
  629. /******************************************************************************/
  630. #define DISTATT  1 /* move toward a player if far, but mantain some space,  */
  631.                    /* attack from a distance - good for missile users only  */
  632. #define RUNATT   2 /* run but attack if player catches up to object         */
  633. #define HITRUN   3 /* run to then hit player then run away cyclicly         */
  634. #define WAITATT  4 /* wait for player to approach then hit, move if hit     */
  635. #define RUSH     5 /* Rush toward player blindly, similiar to dumb monster  */
  636. #define ALLRUN   6 /* always run never attack good for sim. of weak player  */
  637. #define DISTHIT  7 /* attack from a distance if hit as recommended by Frank */
  638. #define WAIT2    8 /* monster does not try to move towards player if far    */
  639.                    /* maintains comfortable distance                        */
  640. #define PETMOVE 16 /* if the upper four bits of move_type / attack_movement */
  641.                    /* are set to this number, the monster follows a player  */
  642.                    /* until the owner calls it back or off                  */
  643.                    /* player followed denoted by 0b->owner                  */
  644.                    /* the monster will try to attack whatever the player is */
  645.                    /* attacking, and will continue to do so until the owner */
  646.                    /* calls off the monster - a key command will be         */
  647.                    /* inserted to do so                                     */
  648. #define CIRCLE1 32 /* if the upper four bits of move_type / attack_movement */
  649.                    /* are set to this number, the monster will move in a    */
  650.                    /* circle until it is attacked, or the enemy field is    */
  651.                    /* set, this is good for non-aggressive monsters and NPC */ 
  652. #define CIRCLE2 48 /* same as above but a larger circle is used             */
  653. #define PACEH   64 /* The Monster will pace back and forth until attacked   */
  654.                    /* this is HORIZONTAL movement                           */
  655. #define PACEH2  80 /* the monster will pace as above but the length of the  */
  656.                    /* pace area is longer and the monster stops before      */
  657.                    /* changing directions                                   */
  658.                    /* this is HORIZONTAL movement                           */
  659. #define RANDO   96 /* the monster will go in a random direction until       */
  660.                    /* it is stopped by an obstacle, then it chooses another */
  661.                    /* direction.                                            */
  662. #define RANDO2 112 /* constantly move in a different random direction       */
  663. #define PACEV  128 /* The Monster will pace back and forth until attacked   */
  664.                    /* this is VERTICAL movement                             */
  665. #define PACEV2 144 /* the monster will pace as above but the length of the  */
  666.                    /* pace area is longer and the monster stops before      */
  667.                    /* changing directions                                   */
  668.                    /* this is VERTICAL movement                             */
  669. #define LO4     15 /* bitmasks for upper and lower 4 bits from 8 bit fields */
  670. #define HI4    240
  671.  
  672. /*
  673.  * Use of the global variable "server_mode":
  674.  */
  675.  
  676. #define SERVER_OFF    0
  677. #define SERVER_ENABLED    1
  678. #define SERVER_ABORTED    2
  679. #define SERVER_DISABLED    3
  680.  
  681. /*
  682.  * Use of the state-variable in player objects:
  683.  */
  684.  
  685. #define ST_PLAYING      0
  686. #define ST_PLAY_AGAIN   1
  687. #define ST_ROLL_STAT    2
  688. #define ST_CHANGE_CLASS 3
  689. #define ST_CONFIRM_QUIT 4
  690. #define ST_CONFIGURE    5
  691. #define ST_GET_NAME     6
  692. #define ST_GET_PASSWORD 7
  693. #define ST_CONFIRM_PASSWORD     8
  694. #define ST_MENU_MORE    9
  695. #define ST_GET_PARTY_PASSWORD 10
  696.  
  697. #define BLANK_FACE_NAME "blank.111"
  698. #define BLOCKED_FACE_NAME "blocked.111"
  699. #define STIPPLE1_FACE_NAME "stipple.111"
  700. #define STIPPLE2_FACE_NAME "stipple.112"
  701. #define POTION_FACE_NAME    "potiongen.111" 
  702.  
  703. #define INV_CURSE_FACE_NAME    "inv-curse.111"
  704. #define INV_DAMN_FACE_NAME    "inv-damn.111"
  705. #define INV_EQUIP_FACE_NAME    "inv-equip.111"
  706. #define INV_LOCK_FACE_NAME    "inv-lock.111"
  707. #define INV_MAGIC_FACE_NAME    "inv-magic.111"
  708. #define INV_UNPAID_FACE_NAME    "inv-unpaid.111"
  709.  
  710. /* separated this from the common/item.c file. b.t. Dec 1995 */
  711.  
  712. #define DESCRIBE_ABILITY(retbuf, variable, name) \
  713.     if(variable) { \
  714.       int i,j=0; \
  715.       strcat(retbuf,"(" name ": "); \
  716.       for(i=0; i<NROFATTACKS; i++) \
  717.         if(variable & (1<<i)) { \
  718.           if (j) \
  719.             strcat(retbuf,", "); \
  720.           else \
  721.             j = 1; \
  722.           strcat(retbuf, attacks[i]); \
  723.         } \
  724.       strcat(retbuf,")"); \
  725.     }
  726.  
  727.  
  728. #define DESCRIBE_PATH(retbuf, variable, name) \
  729.     if(variable) { \
  730.       int i,j=0; \
  731.       strcat(retbuf,"(" name ": "); \
  732.       for(i=0; i<NRSPELLPATHS; i++) \
  733.         if(variable & (1<<i)) { \
  734.           if (j) \
  735.             strcat(retbuf,", "); \
  736.           else \
  737.             j = 1; \
  738.           strcat(retbuf, spellpathnames[i]); \
  739.         } \
  740.       strcat(retbuf,")"); \
  741.     }
  742.